﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class stock_registro_tipo_producto : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");
        if (!m.Stock)
        {
            Response.Redirect("../home/home.aspx");
        }
     
        
        desactivarCampos();
        SetFocus(btnNuevo);
        if (!Page.IsPostBack)
        {
            llenarDatosGrid();
        }
        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuStockDetalles();
    }

    /*************Botones***********************/

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        activarCampos();
        limpiarCampos();
        btnGuardar.Visible = true;
        btnNuevo.Visible = false;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = false;
        SetFocus(txtDescripcion);
        lblMensaje.Text = "";


    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        
        btnNuevo.Visible = true;   
        btnCancelar.Enabled = false;                      
        btnGuardar.Visible = false;
        btnGuardarModif.Visible = false;
        btnBuscar.Enabled = true;

        limpiarCampos();
        desactivarCampos();       

    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        TipoProducto tp = new TipoProducto();

        cargarDesdeInterfaz(tp);

        try
        {
            tp.Guardar();
            lblMensaje.Text = "El tipo fue registrado correctamente";
            limpiarCampos();
            llenarDatosGrid();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

        desactivarCampos();
        btnGuardar.Visible = false;
        btnCancelar.Enabled = false;
        btnNuevo.Visible = true;
        btnBuscar.Enabled = true;

    }
  


    protected void btnAceptarEliminar_Click(object sender, EventArgs e)
    {
        TipoProducto tp = Session["TipoSeleccionado"] as TipoProducto;
        try
        {
            tp.Borrar();
            lblMensaje.Text = "La tipo fue borrado correctamente";
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnGuardarModif.Visible = false;
            btnBuscar.Enabled = true;

            limpiarCampos();
            llenarDatosGrid();

        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
    }


    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = "";
        SetFocus(txtDescripcionBuscar);        
        mpeBuscar.Show();

    }

   

    protected void btnGuardarModif_Click(Object sender, EventArgs e)
    {

        TipoProducto tp = Session["TipoSeleccionado"] as TipoProducto;
        cargarDesdeInterfaz(tp);


        try
        {
            tp.Actualizar();
            lblMensaje.Text = "El tipo fue modificado correctamente";        
            btnGuardarModif.Visible = false;        
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnBuscar.Enabled = true;
            llenarDatosGrid();
            limpiarCampos();


        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
        

    }

   

    /*****************funciones auxiliares*****************/

    private void cargarDesdeInterfaz(TipoProducto tp)
    {
        tp.Descripcion = txtDescripcion.Text;
        tp.Estado = "a";//activo por defecto        

    }


    private void desactivarCampos()
    {
        txtDescripcion.Enabled = false;
    }

    private void activarCampos()
    {
        txtDescripcion.Enabled = true;
    }

    private void limpiarCampos()
    {
        txtDescripcion.Text = "";
        
    }

    /**************************Controles de busqueda*****************/

    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGrid();         

    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {

        limpiarCamposBuscar();
        mpeBuscar.Show();
    }


    private void llenarDatosGrid()
    {
        TipoProducto tp = new TipoProducto();
        Session["Tipo"] = tp; //guardo el tipo en la session para utilizar sus metodos despues

        DataSet ds = tp.Buscar(txtDescripcionBuscar.Text);
        gvTipos.DataSource = ds.Tables[0];
        gvTipos.DataBind();
        Session["Tipos"] = ds.Tables[0]; //Almaceno el DataSet en una variable de Session para usarla el Sorting del GridView

    }

    protected void gvTipos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "editar" || e.CommandName == "borrar")
        {
            gvTipos.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idTipoProducto = Convert.ToInt32(gvTipos.SelectedDataKey.Value);


            //Recupera la tabla Tipos de la session
            DataTable dt = Session["Tipos"] as DataTable;

            //Busca en la tabla el row con el id del tipo seleccionado
            DataRow[] rows = dt.Select("id_tipo_producto = " + idTipoProducto + " ");

            //Creamos un tipo con los datos cargados del grid
            TipoProducto tp = new TipoProducto();
            tp.Id = idTipoProducto;

            tp.Descripcion = rows[0]["descripcion"].ToString();

            //Guardamos el tipo seleccionado en la session para poder modificarlo o eliminarlo despues
            Session["TipoSeleccionado"] = tp;
           

        }

        if (e.CommandName == "editar")
        {
            cargarSeleccionado(); //cargamos a la interfaz los datos del seleccionado
            activarCampos();
            btnGuardarModif.Visible = true;           
            btnCancelar.Visible = true;
            SetFocus(txtDescripcion);
            lblMensaje.Text = "";

        }

        if (e.CommandName == "borrar")
        {
            mpeEliminar.Show();
        }
    }
    private void limpiarCamposBuscar()
    {
        txtDescripcionBuscar.Text = "";
    }


    protected void gvTipos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvTipos.PageIndex = e.NewPageIndex;
        gvTipos.DataSource = Session["Tipos"];
        gvTipos.DataBind();
       
    }

    //Ordena el GridView de Busqueda de los tipos de productos
    protected void gvTipos_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Tipos"] as DataTable;

        if (dt != null)
        {

            //Ordena los datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvTipos.DataSource = Session["Tipos"];
            gvTipos.DataBind();
        }
        
    }

    private string GetSortDirection(string column)
    {

        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }
        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

    /**
    * Carga el tipo de producto que se había selecionado en la busqueda a la interfaz
    */
    private void cargarSeleccionado()
    {
        TipoProducto tp = Session["TipoSeleccionado"] as TipoProducto;

        txtDescripcion.Text = tp.Descripcion;

    
        btnGuardarModif.Visible = false;
        btnCancelar.Visible = true;    
        btnCancelar.Enabled = true;
        btnGuardar.Visible = false;
        btnNuevo.Visible = false;

    }
}
